#include<bits/stdc++.h>
#define int long long
#define endl '\n'
#define debug(x) cerr<<#x<<':'<<x<<endl
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
using namespace std;
const int N=1e3+5,mod=1e9+7;
int n,k;
string op,a,b;
int res;
void add(string s){
    int pw=1;
    for(int i=s.size()-1;i>=0;i--){
        (res+=(s[i]-'0')*pw%mod)%=mod;
        (pw*=2)%=mod;
    }
}
signed main(){
    freopen("lost.in","r",stdin);
    freopen("lost.out","w",stdout);
    cin>>n>>k;
    cin>>op>>a>>b;
    if(k==0){
        string ans="1";
        for(int i=0;i<op.size();i++){
            if(op[i]=='L') ans+='0';
            else ans+='1';
        }
        if(a<=ans&&ans<=b) add(ans);
        ans="1";
        for(int i=0;i<op.size();i++){
            if(op[i]=='L') ans+='1';
            else ans+='0';
        }
        if(a<=ans&&ans<=b) add(ans);
        cout<<res;
        return 0;
    }
    for(int bit=0;bit<(1<<(n-1));bit++){
        if(__builtin_popcount(bit)!=k) continue;
        int f=0;
        string ans="1";
        for(int i=0;i<n-1;i++){
            if(bit&(1<<i)) f^=1;
            if(f){
                if(op[i]=='L') ans+='0';
                else ans+='1';
            }
            else{
                if(op[i]=='L') ans+='1';
                else ans+='0';
            }
        }
        if(a<=ans&&ans<=b) add(ans);
        ans="1";
        f=1;
        for(int i=0;i<n-1;i++){
            if(bit&(1<<i)) f^=1;
            if(f){
                if(op[i]=='L') ans+='0';
                else ans+='1';
            }
            else{
                if(op[i]=='L') ans+='1';
                else ans+='0';
            }
        }
        if(a<=ans&&ans<=b) add(ans);
    }
    cout<<res;
    return 0;
}